package com.atguigu.jxc.controller;

import com.alibaba.fastjson.JSON;
import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.domain.SuccessCode;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.service.GoodsService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description 商品信息Controller
 */
@RestController
public class GoodsController {

    @Autowired
    private GoodsService goodsService;



    /**
     * 分页查询商品库存信息
     *
     * @param page        当前页
     * @param rows        每页显示条数
     * @param codeOrName  商品编码或名称
     * @param goodsTypeId 商品类别ID
     * @return
     */
//    请求URL：http://localhost:8080/goods/listInventory
//    请求参数：Integer page, Integer rows, String codeOrName, Integer goodsTypeId
//    请求方式：POST
//    返回值类型： JSON
//    返回值：Map<String,Object>
    @PostMapping("/goods/listInventory")
    public Map<String, Object> listInventory(Integer page, Integer rows, String codeOrName, Integer goodsTypeId) {
        Map<String, Object> map = goodsService.listInventory(page, rows, codeOrName, goodsTypeId);
        return map;
    }


    /**
     * 分页查询商品信息
     *
     * @param page        当前页
     * @param rows        每页显示条数
     * @param goodsName   商品名称
     * @param goodsTypeId 商品类别ID
     * @return
     */
    @PostMapping("/goods/list")
    public Map<String, Object> goodList(Integer page, Integer rows, String goodsName, Integer goodsTypeId) {
        return goodsService.goodList(page, rows, goodsName, goodsTypeId);
    }

    /**
     * 生成商品编码
     *
     * @return
     */
    @RequestMapping("/goods/getCode")
    @RequiresPermissions(value = "商品管理")
    public ServiceVO getCode() {
        return goodsService.getCode();
    }

    /**
     * 添加或修改商品信息
     *
     * @param goods 商品信息实体
     * @return
     */
//    请求URL：http://localhost:8080/goods/save?goodsId=37
//    请求参数：Goods goods
//    请求方式：POST
//    返回值类型：JSON
//    返回值：ServiceVO
    @PostMapping("/goods/save")
    public ServiceVO savaGoods(Goods goods) {

        goodsService.saveGoods(goods);
        return new ServiceVO<>(SuccessCode.SUCCESS_CODE, SuccessCode.SUCCESS_MESS);
    }

    /**
     * 删除商品信息
     * @param goodsId 商品ID
     * @return
     */
//    请求URL：http://localhost:8080/goods/delete
//    请求参数：Integer goodsId
//    请求方式：POST
//    返回值类型：JSON
//    返回值：ServiceVO
    @PostMapping("/goods/delete")
    public ServiceVO deleteGoods(Integer goodsId) {

        return goodsService.deleteGoods(goodsId);

    }


    /**
     * 分页查询无库存商品信息
     *
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     */
//    请求URL：http://localhost:8080/goods/getNoInventoryQuantity
//    请求参数：Integer page,Integer rows,String nameOrCode
//    请求方式：POST
//    返回值类型：JSON
//    返回值：Map<String,Object>
    @PostMapping("/goods/getNoInventoryQuantity")
    public Map<String, Object> getNoInventoryQuantity(Integer page,Integer rows,String nameOrCode){
        return goodsService.getNoInventoryQuantity(page,rows,nameOrCode);
    }

    /**
     * 分页查询有库存商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     */
    @PostMapping("/goods/getHasInventoryQuantity")
    public Map<String, Object> getHasInventoryQuantity(Integer page,Integer rows,String nameOrCode){
        return goodsService.getHasInventoryQuantity(page,rows,nameOrCode);
    }


    /**
     * 添加商品期初库存
     * @param goodsId 商品ID
     * @param inventoryQuantity 库存
     * @param purchasingPrice 成本价
     * @return
     */
//    请求URL：http://localhost:8080/goods/saveStock?goodsId=25
//    请求参数：Integer goodsId,Integer inventoryQuantity,double purchasingPrice
//    请求方式：POST
//    返回值类型：JSON
//    返回值：ServiceVO
    @PostMapping("/goods/saveStock")
    public ServiceVO saveStock( Integer goodsId,Integer inventoryQuantity,double purchasingPrice){
        goodsService.saveStock(goodsId,inventoryQuantity,purchasingPrice);
        return new ServiceVO<>(SuccessCode.SUCCESS_CODE, SuccessCode.SUCCESS_MESS);

    }

    /**
     * 删除商品库存
     * @param goodsId 商品ID
     * @return
     */
//    请求URL：http://localhost:8080/goods/deleteStock
//    请求参数：Integer goodsId
//    请求方式：POST
//    返回值类型：JSON
//    返回值：ServiceVO
    @PostMapping("/goods/deleteStock")
    public ServiceVO deleteStock(Integer goodsId) {

        return goodsService.deleteStock(goodsId);

    }


    /**
     * 查询库存报警商品信息
     *
     * @return
     */
//    请求URL：http://localhost:8080/goods/listAlarm
//    请求参数：无
//    请求方式：POST
//    返回值类型：JSON
//    返回值：Map<String,Object>
    @PostMapping("/goods/listAlarm")
    public Map<String,Object> listAlarm(){
        return goodsService.listAlarm();
    }



//    请求URL：http://localhost:8080/unit/list
//请求参数：无
//请求方式：POST
//返回值类型：JSON
//返回值：Map<String,Object>
    //查询所有商品单位
    @PostMapping("/unit/list")
    public Map<String, Object> unitList() {
        return goodsService.unitList();
    }



}
